
function Fn(n, m) {
    this.n = n
    this.m = m
}
Fn.prototype.getn = function () { console.log(this.n) }


class Fn {
    // constructor==es5构造函数Fn  constructor()==Fn() 私有
    constructor(n, m) {
        this.n = n
        this.m = m

    }
    // 给Fn原型上设置共有方法 Fn.prototype.getn 公有
    getn() {
        console.log(this.n)
    }
    // 不能在类原型上设置共有属性。
}
Fn.prototype.BB=100

console.log(Fn.prototype)


class Fn {
    // constructor==es5构造函数Fn  constructor()==Fn() 私有
    constructor(n, m) {
        this.n = n
        this.m = m

    }
    // 给Fn原型上设置共有方法 Fn.prototype.getn 公有
    getn() {
        console.log(this.n)
    }
    // 不能在类原型上设置共有属性。

    // 把Fn当做一个普通函数对象 只能设置方法（和实例没有关系）
    static AA() { }
}

// 在外面写Fn原型对象的共有属性
Fn.prototype.BB = 100
// 在外面把Fn看作一个普通函数对象，设置属性
Fn.CC = 200

let fn = new Fn(10, 20)
console.log(fn.n, fn.m)
fn.getn()


// es6创建类的函数只能通过new执行，不能当做普通函数执行

class A {
    // 构造函数里面私有属性
    constructor() {
        this.x = [100, 200]
    }
    // 类原型对象共有方法
    getX() {
        console.log(this.x)
    }
}
class B extends A {
    constructor() {
        super()
        this.y = [1, 2]
    }
    getY() {
        console.log(this.y)
    }
}
// 每个实例之间互不影响。
let b = new B()



